# encoding=utf-8

import warnings

warnings.filterwarnings('ignore')
#显示中文
from pylab import *  #显示中文

mpl.rcParams['font.sans-serif'] = ['SimHei']  #显示中文
#画图中显示负号
import matplotlib

matplotlib.rcParams['axes.unicode_minus'] = False

from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

# 请利用sklearn中的鸢尾花数据集和SVM算法，并结合网格搜索方法，对数据进行分类。具体要求如下：
# 1、	加载鸢尾花数据集( 10分)
from sklearn import datasets
iris= datasets.load_iris()

# 2、	将鸢尾花数据集分割为训练集(70%)和测试集(30%)( 10分)
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.3)
# 3、	使用网格搜索交叉验证，获取数据信息
# a)	定义SVM分类器( 10分)
svc = SVC()
# b)	对gamma和C进行调参( 10分)
param_grid = {"gamma":[0.001,0.01,0.1,1,10,100],
             "C":[0.001,0.01,0.1,1,10,100]}
# c)	使用5折交叉验证( 10分)
grid_search = GridSearchCV(svc,param_grid,cv=5) #实例化一个GridSearchCV类   网格搜索中有交叉验证
# d)	拟合训练集数据( 10分)
grid_search.fit(X_train,y_train)
# e)	打印最优得分( 10分)
print(grid_search.best_score_)
# f)	打印最优参数( 10分)
print(grid_search.best_params_)
# 4、	记录最优参数后，重新创建SVM模型，拟合训练数据集( 10分)
svc = SVC(C = 10, gamma = 0.1)
svc.fit(X_train,y_train)
# 5、	打印输出模型得分( 10分)
print(svc.score(X_train,y_train))
print(svc.score(X_test,y_test))